import { HttpClient } from '@angular/common/http';
import { Pipe, PipeTransform } from '@angular/core';
import { of } from 'rxjs';
import { catchError, map } from 'rxjs/operators';
import { RDataConfig } from '../r-models/r-table.model';
@Pipe({
  name: 'rDropdownLoading'
})

/**
 * 公司：xxx有限公司
 * 版权：xxx2020
 * 描述：动态获取并返回下拉数据，args1为公共下拉配置中的key,args2为传递的参数
 * 作者：oyjl
 * 时间：2020-03-10 16:37:48
 */
export class RDropdownLoadingPipe implements PipeTransform {

  constructor(private http: HttpClient) { }
  // 使用方法：xxx | rDropdownLoading:'boxList':'data':{data:{},pageInfo:{pageIndex:0,pageSize:15}} | async
  // 主要用于获取下拉数据
  transform(
    value: any,
    url: any,
    args2: any = 'data',
    args3: any = { pageInfo: { pageIndex: 1, pageSize: 10000000 } },
    args4: RDataConfig = { key: 'data', status: 'status', value: 200 }): any {
    return this.http.post(url, args3).pipe(
      map((res: any) => {
        if (this.afterStatusSwitch(args4, res)) {
          const fields = args2.split('.');
          let dropdownOption = res;
          for (const item of fields) {
            if (item && item !== '') {
              dropdownOption = dropdownOption[item];
            }
          }
          return dropdownOption;
        }
      }), catchError(err => {
        return of(err.message);
      })
    );
  }

  /**
   * 描述：后端状态处理
   * 作者：oyjl
   * 时间：2020-04-22 10:18:55
   */
  public afterStatusSwitch(dataConfig: RDataConfig, res): boolean {
    if (res[dataConfig.status] === dataConfig.value) {
      return true;
    }
    return false;
  }

}
